fix(auth): add token issuer validation for MCP spec compliance #1447
+55
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR implements token issuer validation in the MCP Python SDK client to ensure compliance with the MCP specification requirement:
Previously, the SDK only checked for token existence and expiration.
This change adds verification that tokens were issued by the expected authorization server before they are used.
What I Changed
auth.py
expected_issuer: str | None = None
toOAuthContext
.is_token_valid()
to:expected_issuer
is not set, preserve the original behavior.expected_issuer
is set, decode the access token (assuming JWT format), extract theiss
claim, and verify that it matchesself.expected_issuer
.False
for missing/mismatched issuers or parsing errors.Why This Is Safe and Backward-Compatible
expected_issuer
is not provided, behavior is identical to previous versions.is_token_valid
and one private helper were modified.False
return value (fail closed).Validation Performed
iss
claims.is_token_valid()
correctly respects token expiry and issuer matching.🔗 Related Issue
Closes #1442
Type of Change